#include <iostream>

typedef void *(*func_t)(void*);

class threadData
{
public:
    void *_args;
    std::string _name;
};

class Thread
{
public:
    // 构造 : 初始化线程变量
    Thread(int num, func_t callback, void* args):_func(callback)
    {
        char nameBuffer[64];
        snprintf(nameBuffer, sizeof nameBuffer, "[Thread]:%d", num);
        _name = nameBuffer;

        _tdata._args = args;
        _tdata._name = _name;
    }

    ~Thread()
    {}

    void start()
    {
        pthread_create(&_tid, nullptr, _func, (void*)&_tdata);
    }

    void join()
    {
        pthread_join(_tid, nullptr);
    }

    std::string name()
    {
        return _name;
    }

private:
    std::string _name;
    threadData _tdata;
    func_t _func;
    pthread_t _tid;
};